﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using kk.belegungsadapter;
using kk.belegungsplan.factory;
using kk.belegungsplanansicht;
using kk.components.contracts;
using kk.portal;
using kk.preiskategorieadapter;
using kk.sbadapter;

namespace kk.host
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try {
                IBelegungsplanAnsicht belegungsplanansicht = new BelegungsplanAnsicht();
                IReservierungsrahmen reservierungsrahmen = new PortalForm((Control)belegungsplanansicht);

                IBelegungsplanFactory belegungsplanfactory = new BelegungsplanFactory();
                ISaalbestuhlungsAdapter saalbestuhlungsplanadapter = new SBAdapter();
                IPreiskategorieAdapter preiskategorieadapter = new PreiskategorieAdapter();
                IBelegungsAdapter belegungsadapter = new BelegungsAdapter();

                belegungsplanansicht.OnPlatzwahlChanged += reservierungsrahmen.ProcessPlatzwahlChanged;

                reservierungsrahmen.OnBelegungsplanZuVorstellung += belegungsplanfactory.BelegungsplanZuVorstellung;
                reservierungsrahmen.OnBelegungsplan += belegungsplanansicht.ProcessBelegungsplan;
                reservierungsrahmen.OnReservierungsanfrage += belegungsadapter.ProcessReservierungsanfrage;
                              
                belegungsplanfactory.OnBestuhlungZuSaalplan += saalbestuhlungsplanadapter.ProcessBestuhlungZuSaal;
                belegungsplanfactory.OnPreiskategorien += preiskategorieadapter.ProcessPreiskategorien;
                belegungsplanfactory.OnBelegungenZuVorstellung += belegungsadapter.BelegungenZuVorstellung;

                reservierungsrahmen.Configure();
                Application.Run((Form)reservierungsrahmen);
            }
            catch (Exception e) {
                MessageBox.Show(e.ToString(), "Und es hat Bumm gemacht...");
            }
        }
    }
}
